名字空间别名

  如果用户给他们的名字空间取很短的名字,不同名字空间的名字也可能出现冲突:

    namespace A {                // 短名字,(最终)将冲突
        // ...
    }

    A::String s1 = "Grieg";
    A::String s2 = "Nielsen";

然而长名字在实际代码中又很不实用:

    namespace American_Telephone_and_Telegraph {        // 太长
        // ...
    }

    American_Telephone_and_Telegraph::String s3 = "Grieg";
    American_Telephone_and_Telegraph::String s4 = "Nielsen";

这种两难境地可以通过为长名字提供较短的别名的方式解决:

    // 为名字空间提供较短的别名:
    namespace ATT = American_Telephone_and_Telegraph;

    ATT::String s3 = "Grieg";
    ATT::String s4 = "Nielsen";

名字空间别名也使用户能够引用“某一个库”,并通过惟一的一个声明来定义那个库到底是什么。例如,

    namespace Lib = Foundation_library_v2r11;
    // ...
    Lib::set s;
    Lib::String s5 = "Sibelius";

这将使得用库的一个版本取代另一个的工作得到极大的简化。通过使用Lib而不是直接用Foundation_bibrary_v2r11,当你需要更新到版本“v3r02”时,只要修改别名Lib的初始化并重新编译。当然,在另一方面,过多使用别名(无论什么形式)也会引起混乱。

🔚